{ "cells": [ { "cell_type": "markdown", "id": "919604fe", "metadata": {}, "source": [ "# How to serialize work-items" ] }, { "cell_type": "code", "execution_count": null, "id": "fc5b3e46-a26a-4a9f-82ea-fcf7e1385f56", "metadata": {}, "outputs": [], "source": [ "import os\n", "\n", "import capellambse\n", "import dotenv\n", "\n", "from capella2polarion.connectors import polarion_worker\n", "from capella2polarion.converters import (\n", " converter_config,\n", " data_session,\n", " element_converter,\n", ")" ] }, { "cell_type": "markdown", "id": "9c6ec8f5", "metadata": {}, "source": [ "Create a `.env` file with the following values:\n", "- MODEL_PATH\n", "- POLARION_PROJECT\n", "- POLARION_HOST\n", "- POLARION_PAT" ] }, { "cell_type": "code", "execution_count": null, "id": "c3fbe043-1a16-48b1-8cf9-6e549643263a", "metadata": {}, "outputs": [], "source": [ "dotenv.load_dotenv()\n", "model = capellambse.MelodyModel(os.environ.get(\"MODEL_PATH\", \"\"))\n", "worker = polarion_worker.CapellaPolarionWorker(\n", " polarion_worker.PolarionWorkerParams(\n", " os.environ.get(\"POLARION_PROJECT\", \"\"),\n", " os.environ.get(\"POLARION_HOST\", \"\"),\n", " os.environ.get(\"POLARION_PAT\", \"\"),\n", " delete_work_items=False,\n", " )\n", ")\n", "worker.load_polarion_work_item_map()" ] }, { "cell_type": "markdown", "id": "ea8d40bd-73c4-4df6-8e0f-9d9b30a40c4f", "metadata": {}, "source": [ "In this example we want to test a jinja template for classes. We want to adjust nothing but the description field and we want to update all classes related to the class, too." ] }, { "cell_type": "code", "execution_count": 27, "id": "d29ee234-0ec7-4a2b-a2a6-05cdb170ce67", "metadata": {}, "outputs": [], "source": [ "from capellambse.metamodel import information\n", "\n", "\n", "def add_class_incl_dependencies(\n", " cls: information.Class, classes: list[information.Class]\n", "):\n", " if cls in classes:\n", " return\n", "\n", " classes.append(cls)\n", " if cls.super:\n", " add_class_incl_dependencies(cls.super, classes)\n", "\n", " for property in cls.properties:\n", " if not (_type := property.type):\n", " continue\n", "\n", " if getattr(_type, \"is_abstract\", False):\n", " _type = property.abstract_type\n", "\n", " if isinstance(_type, information.Class):\n", " add_class_incl_dependencies(_type, classes)" ] }, { "cell_type": "code", "execution_count": 28, "id": "5dcb5313-aca5-4ffa-88bb-f2644631bcfa", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "classes = []\n", "add_class_incl_dependencies(\n", " model.by_uuid(\"4ede9589-8b67-4b33-970d-810064b1cde6\"), classes\n", ")\n", "len(classes)" ] }, { "cell_type": "code", "execution_count": null, "id": "9059c90f-58aa-4bea-a472-c51b1c94da35", "metadata": {}, "outputs": [], "source": [ "class_config = converter_config.CapellaTypeConfig(\n", " \"class\",\n", " {\n", " \"jinja_as_description\": {\n", " \"template_folder\": \"element_templates\",\n", " \"template_path\": \"class.html.j2\",\n", " }\n", " },\n", " [],\n", ")\n", "serializer = element_converter.CapellaWorkItemSerializer(\n", " model,\n", " worker.polarion_data_repo,\n", " {\n", " cls.uuid: data_session.ConverterData(\n", " \"pa\",\n", " class_config,\n", " cls,\n", " )\n", " for cls in classes\n", " },\n", " False,\n", ")" ] }, { "cell_type": "code", "execution_count": null, "id": "799e5c84-d48f-406c-ab11-356400a9d7a3", "metadata": {}, "outputs": [], "source": [ "wis = serializer.serialize_all()" ] }, { "cell_type": "code", "execution_count": null, "id": "6fc38c3b-86dc-4ba8-9ab1-d38b097df768", "metadata": {}, "outputs": [], "source": [ "worker.project_client.work_items.update(wis)" ] }, { "cell_type": "markdown", "id": "0f9890e0-ae1b-4cff-87d9-051088e8d7c0", "metadata": {}, "source": [ "Below you find an additional example for an ExchangeItem" ] }, { "cell_type": "code", "execution_count": null, "id": "958bc4e4-61f4-4a92-b85c-1c3fd61c8641", "metadata": {}, "outputs": [], "source": [ "ei = model.by_uuid(\"f19d50b4-81d3-4fab-b8d3-55dfc9631444\")\n", "ei_config = converter_config.CapellaTypeConfig(\n", " \"exchangeItem\",\n", " {\n", " \"jinja_as_description\": {\n", " \"template_folder\": \"element_templates\",\n", " \"template_path\": \"exchange_item.html.j2\",\n", " }\n", " },\n", " [],\n", ")\n", "serializer = element_converter.CapellaWorkItemSerializer(\n", " model,\n", " worker.polarion_data_repo,\n", " {\n", " ei.uuid: data_session.ConverterData(\n", " \"pa\",\n", " ei_config,\n", " ei,\n", " )\n", " },\n", " False,\n", ")" ] }, { "cell_type": "code", "execution_count": null, "id": "0cda9587-b92f-4818-b18a-0e3183b12fff", "metadata": {}, "outputs": [], "source": [ "wis = serializer.serialize_all()" ] }, { "cell_type": "code", "execution_count": null, "id": "a3fc2622-0591-49f5-b2ef-4e8cfc9f1773", "metadata": {}, "outputs": [], "source": [ "worker.project_client.work_items.update(wis)" ] } ], "metadata": { "kernelspec": { "display_name": "py312", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.4" } }, "nbformat": 4, "nbformat_minor": 5 }